Linux jar 包与日志处理
让 jar 包后台运行
应用场景:在应用服务以 jar 包运行时,无法像 war 包一样能直接输出日志,通常都是在 dos 窗口内,不便于查阅日志。
新建两个 shell 文件
start.sh
#! /bin/bash
java -jar "/home/happy01/happyserver/HappyTileMapServer-1.0-SNAPSHOT.jar" > /home/happy01/happyserver/fslog.txt &
# 将 jar 包启动程序的 pid 写入文件中,停止时可直接 kill pid
echo $! > /home/happy01/pid.txt
命令解释:执行 HappyTileMapServer 这个文件,并且输出到 fslog.txt
文件,&
表示后台运行
stop.sh
#! /bin/bash
PID=$(cat /home/happy01/pid.txt)
kill -9 $PID
启动项目:./start.sh
停止项目:./stop.sh
查看当前有多少在后台运行的命令
jobs -l
选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的 shell 环境已知的列表中删除任务的进程标识;
也就是说,jobs 命令显示的是当前 shell 环境中所起的 后台正在运行或者被挂起的任务信息;
让进程放回前台
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber
将选中的命令调出,%jobnumber
是 通过 jobs 命令查到的后台正在执行的命令的序号(不是 pid)
后台执行
将一个在后台暂停的命令,变成继续执行 (在后台执行)
如果后台中有多个命令,可以用 bg %jobnumber
将选中的命令调出,%jobnumber
是通过 jobs 命令查到的后台正在执行的命令的序号(不是 pid)
将任务转移到后台运行: 先 ctrl + z;再 bg,这样进程就被移到后台运行,终端还能继续接受命令。
显示日志的工具 tail
如果想要实时显示日志可以使用这个
tail 命令可用于查看文件的内容,有一个常用的参数 -f
常用于查阅正在改变的日志文件。
tail -f filename
会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
tail -f /home/happy01/happyserver/fslog.txt
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
要显示 notes.log
文件的最后 10 行,请输入以下命令:
tail notes.log # 默认显示最后 10 行
要跟踪名为 notes.log
的文件的增长情况,请输入以下命令:
tail -f notes.log
tail -n 100 /etc/cron #显示最后100行数据
tail -n -100 /etc/cron #除了前99行不显示外,显示第100行到末尾行
修改 jar 包里面的文件
有时候,部署上去了需要临时修改个配置文件
1、列出 jar 包中的文件清单
jar tf HappyTileMapServer-1.0-SNAPSHOT.jar
2、提取出内部 jar 包的指定文件
# grep 查找
# 如果不加参数则解压所有的文件
# 提取出内部 jar 包的指定文件
jar xf HappyTileMapServer-1.0-SNAPSHOT.jar BOOT-INF/classes/testData.json
# 进去修改文件
vim BOOT-INF/classes/testData.json
3、更新配置文件到内部 jar 包(存在覆盖,不存在就新增)
jar uf HappyTileMapServer-1.0-SNAPSHOT.jar BOOT-INF/classes/testData.json